#include "widget.h"
#include "ui_widget.h"

#include <QDir>
#include <QDebug>
#include <QFileInfoList>
#include <QFileInfo>
#include <QDateTime>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 1. Qdir
//    QDir dir(".");
//    qDebug() << dir.absolutePath();  // 绝对路径
//    qDebug() << dir.dirName();  // 相对路径
//    qDebug() << dir.exists();  // 是否存在

//    dir.mkdir("e:/aaaa");
//    dir.mkdir("e:/bbbb/cccc/dddd");  // 不能创建深层次的目录
//    dir.rmdir("e:/aaaa"); // 不能删除非空目录

    // 获取当前目录下所有的文件和文件夹
//    QDir dir("E:/aaa");
//    // 显示目录、文件，不显示 链接文件 、当前目录（.） 、上一级目录（..）
//    dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot);
//    // 对文件后缀的过滤
//    QFileInfoList list = dir.entryInfoList({"*.jpg", "*.png"});

//    for(auto item : list)
//    {
//        qDebug() << item;
//    }

    // 2. QFileInfo
//    QFileInfo info("E:/aaa/1photo.jpg");

//    qDebug() << info.absoluteFilePath();
//    qDebug() << info.fileName();
//    qDebug() << info.baseName();
//    qDebug() << info.suffix();
//    qDebug() << info.size();  // 注意：size() 只能获取文件大小，无法获取目录大小
//    qDebug() << info.isDir();
//    qDebug() << info.isFile();

    // 3. 获取路径下所有文件和目录的详细信息
    this->getFileInfo("E:/aaa");

    // 测试目录大小计算
    qDebug() << this->getDirSize("E:/aaa");

}

qint64 Widget::getDirSize(QString dirPath)
{
    QDir dir(dirPath);
    dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
    QFileInfoList list = dir.entryInfoList();
    int size = 0;
    for (auto item : list)
    {
        if(item.isFile())
        {
            // 将当前目录中的文件大小获取，并累加到 size 中
            size += item.size();
        }
        else if(item.isDir())
        {
            // 计算子目录大小，并累加到 size 中
            size += this->getDirSize(item.absoluteFilePath());
        }

    }
    return size;
}

void Widget::getFileInfo(QString filePath)
{
    QDir dir(filePath);
    if (!dir.exists())
    {
        qDebug() << "目录不存在";
        return;
    }
    QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
    qDebug() << "类型" << "名称" << "大小" << "创建时间";

    for (auto item : fileInfoList)
    {
        QString type = item.isDir() ? "dir" : "file";
        QString name = item.fileName();
        qint64 size = (item.isFile()? item.size() : this->getDirSize(item.absoluteFilePath()));
        QString creationTime = item.birthTime().toString("yyyy-MM-dd");
        qDebug() << type << name << size << creationTime;
    }
}


Widget::~Widget()
{
    delete ui;
}
